package sistemaDefensivo;

import escenario.AtributoEscenario;
import escenario.Escenario;
import escenario.Posicion;
import comunicacion.Cliente;
import comunicacion.Mensaje;

public class SistemaDeRadar extends AtributoEscenario{

	private final int radioDeteccion = 500;
	private Cliente client;
	
	public SistemaDeRadar(Escenario es){
//  	Agregamos una variable booleana para utilizar el constructor con coordenadas cartesianas
		setPosicion(new Posicion(0,0,0, true));
		setEscenario(es);
		client = new Cliente("localhost", 5000);
	}

	public int getRadioDeteccion(){
		return radioDeteccion;
	}
	
	private double getProyeccionXY (double x, double y, double z){
		double radio, tita;
		radio = Math.sqrt(Math.pow(x,2) + Math.pow(y,2) + Math.pow(z,2));
		tita = Math.acos(z / radio);
		return ((radio * Math.sin(tita)));
	}
	
	private boolean misilDetectado(int i){
		double x = this.getEscenario().getPosEnemigo(i).getX();
		double y = this.getEscenario().getPosEnemigo(i).getY();
		double z = this.getEscenario().getPosEnemigo(i).getZ();
//		System.out.println("Proyeccion en XY del misil:" + i + "  es: " + getProyeccionX(x, y, z));

		if (getProyeccionXY(x, y, z) <= radioDeteccion)
			return true;
		else
			return false;
	}

	private Mensaje creadorFoto(int i){
		int id = this.getEscenario().getPosEnemigo(i).getId();
		double xDest = this.getEscenario().getPosEnemigo(i).getXDest();
		double yDest = this.getEscenario().getPosEnemigo(i).getYDest();
		double zDest = this.getEscenario().getPosEnemigo(i).getZDest();
		double x = this.getEscenario().getPosEnemigo(i).getX();
		double y = this.getEscenario().getPosEnemigo(i).getY();
		double z = this.getEscenario().getPosEnemigo(i).getZ();
		return new Mensaje(id, x, y, z, xDest, yDest, zDest);
	}

	public void run(){
		System.out.println("Se inicia la ejecucion del sistema de radar en la posicion: " + this.printPos());
		while(true){
			for(int i=0; i < (this.getEscenario().getSizeArrayPosEnemigos()); i++){
				if(misilDetectado(i)){
//					System.out.println("\nSISTEMA DE RADAR dice ===================> Se detecto el misil enemigo: " + this.getEscenario().getPosEnemigo(i).getId());
					client.createClient();
					client.sendObject(creadorFoto(i));
					client.close();
				}
			}
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}